package org.ch02.test01.demo01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 *  获取某个类的Class对象 - 方法
 *  Class.forName("包名.类名")
 *  <p></p>
 *
 * 注意：此案例完全基于反射来实现类的操作 - 更灵活，更好扩展
 *
 * @author ZJL
 * @date 2025-03-17
 */
public class MainTest02 {
    public static void main(String[] args) throws Exception {
        // 1.获取 Student 类的 Class 对象
        Class<?> clazz = Class.forName("org.ch02.entity.Student");

        // 在反射中，把类的相关信息封装为相关的对象
        // 2.获取类的构造方法对象
        Constructor<?> constructor = clazz.getConstructor();

        // 3.实例化对象
        Object obj = constructor.newInstance();

        //4.通过 Class 对象，获取要调用的方法
        // getMethod("方法名",方法参数的 Class 对象,...);
        Method method = clazz.getMethod("sayHello",String.class);
        //5.调用方法 - 对象.xxx()
        // 在 Method 对象中，提供了 invoke 方法，调用 Method 对象指向
        // 语法：[Object obj = ] invoke("对象名称",参数,...)
       method.invoke(obj,"张三");
    }
}
